//package com.javabasic;
//
//import com.javabasic.serialize.model.Content;
//import lombok.AllArgsConstructor;
//import lombok.Data;
//import lombok.NoArgsConstructor;
//import org.checkerframework.checker.initialization.qual.NotOnlyInitialized;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.concurrent.ArrayBlockingQueue;
//import java.util.concurrent.BlockingQueue;
//import java.util.concurrent.ThreadPoolExecutor;
//import java.util.concurrent.TimeUnit;
//
///**
// * @author mir.xiong
// * @version 1.0
// * @description
// * @see
// * @since Created by work on 2021/12/6 8:53 下午
// */
//public class Main {
//
//    /**
//     * 模拟数据准备过程
//     * @return
//     */
//    public static List<Message> dataProvider() {
//        List<Message> messages = new ArrayList<>();
//        final int MESSAGE_SIZE = 10000;
//        for (int i = 0; i < MESSAGE_SIZE; i++) {
//            messages.add(new EmailMessage());
//            messages.add(new ShortMessage());
//            messages.add(new DingDingMessage());
//        }
//    }
//
//    public static void main(String[] args) {
//        List<Message> messageList = dataProvider();
//        int coreSize = Runtime.getRuntime().availableProcessors() * 2;
//        int maxSize = 100;
//        BlockingQueue<Runnable> messages = new ArrayBlockingQueue<Runnable>(1000);
//        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(coreSize, maxSize, 60, TimeUnit.SECONDS, messages);
//        if (null != messageList && !messageList.isEmpty()) {
//            for (Message message : messageList) {
//                threadPoolExecutor.submit(message);
//            }
//        }
//
//    }
//}
//@Data
//@NoArgsConstructor
//@AllArgsConstructor
//abstract class Message implements Runnable, CheckInterface{
//    protected String receiver;
//    protected List<MsgContent> content;
//
//    @Override
//    public void run() {
//        synchronized (Message.class) {
//            // todo
//            //  1. 校验Message,校验成功发送信息，校验失败抛出异常说明远影
//            //  2. 调用发送信息的接口
//        }
//    }
//}
//
///**
// * 文本内容
// */
//interface MsgContent {
//
//}
//
//class TxtContent implements MsgContent {
//    int size;
//}
//
//class ImageContent implements MsgContent {
//
//}
//
//class AttachContent implements MsgContent {
//
//}
//
//interface CheckInterface{
//    default boolean checkMessage(Message message) {
//        boolean result = true;
//        result = checkEmpty(message);
//        if (!result) {
//            return result;
//        }
//        result = execCheck(message);
//        return result;
//    }
//
//    boolean execCheck(Message message);
//
//    default boolean checkEmpty(Message message) {
//        List<MsgContent> content = message.getContent();
//        if (null == content || content.isEmpty()) {
//            return true;
//        }
//        return false;
//    }
//}
//class ShortMessage extends Message {
//
//    @Override
//    public boolean execCheck(Message message) {
//        TxtContent txtContent = null;
//        for (MsgContent msgContent : content) {
//            if (!(content instanceof TxtContent)) {
//                return false;
//            }
//            txtContent = (TxtContent) content;
//            if (txtContent.size > 100) {
//                return false;
//            }
//        }
//        return true;
//    }
//}
//
//class EmailMessage extends Message {
//
//
//    @Override
//    public boolean execCheck(Message message) {
//        TxtContent txtContent = null;
//        for (MsgContent msgContent : content) {
//            if ((content instanceof TxtContent) || (content instanceof ImageContent)) {
//                continue;
//            } else {
//                return false;
//            }
//        }
//        return true;
//    }
//}
//
//
//class DingDingMessage extends Message {
//    @Override
//    public boolean execCheck(Message message) {
//        TxtContent txtContent = null;
//        for (MsgContent msgContent : content) {
//            if ((content instanceof TxtContent) || (content instanceof ImageContent) || (content instanceof AttachContent)) {
//                continue;
//            } else {
//                return false;
//            }
//        }
//        return true;
//    }
//}